子不语Rex

学会使用 Word 中的邮件合并

你的邮箱中,有没有收到过类似的邮件?乍一看,这封邮件好像是专门为你而发的,邮件标题里写着你的名字,内容中写了你的大学、专业等等个性化信息。但仔细一想,你又肯定知道,这种类型的邮件,绝无可能是对方专门为了你而撰写的,肯定是批量群发的。

邮件中的个性化信息

如果你的岗位是互联网运营,那么你对这样的邮件肯定不陌生。通过邮箱触达用户时,加上这些个性化的内容,显然用户会更愿意点开和了解。一般在大型的互联网公司,这样的邮件往往会有研发的参与,能够帮助你自动批量生成个性化的邮件。不过,如果你只是想自己试试手,其实完全无须研发的介入,通过 Word 也可以做到。而且,通过本文你会发现,除了生成这样的邮件之外,它还有不少应用的场景。

邮件合并是什么?

在 Word 中,许多人最陌生的选项卡可能就是「邮件」了。的确,如果不熟悉 Word 的话,切换到这个选项卡,一半多的按钮都是不可点击的状态,唯一能点的几个按钮,点击后又会跳出来一堆不明所以的子选项。

Word 中的「邮件」选项卡

但其实,这个功能的本质,用一句话来概括:就是以固定模板来批量生成动态内容。怎么理解这句话呢?回过头去看看文章开头的那封邮件,这个概括有三个核心定义:

  1. 固定模板:整封邮件中,没有被高亮的部分其实都是固定的。不变化的部分,既包含了不变的内容,如邮件行文中的通用部分;也包含了不变的格式,如文字颜色、大小、背景图片等。
  2. 动态内容:显然,这封邮件中有三个动态内容,依次为学校、姓名、专业。不同人收到的这封邮件,实际上只有这三个内容是不一样的。
  3. 批量:既然在不变之中,只有三处变量,那么 Word 帮助我们实现的,就是批量地将变量填充进去,整个过程完全是自动化的,不需要像手工操作那样来回地复制粘贴,而只需要设置好固定模板,指定好动态内容,一个按钮就搞定了。

看到这里,你可能发现了,如果按照这个定义来看,这种模板固定、内容动态的,不一定只能是这种邮件。没错,这可能是 Word 中从命名上来看,最容易被人误解的功能了。「邮件合并」并不仅仅只能生成邮件,相反,只要这个文件符合模板固定、内容动态的条件,它都可以用其来生成。例如,像工牌、标签、准考证、工资条、邀请函等等,都符合这个特点。

第一次使用邮件合并:批量生成奖状

接下来,我们就一个具体案例,来尝试第一次使用邮件合并,了解它的基础功能。

比如说,公司年末评选出了需要表彰的员工,为了给员工更多的荣誉感,现在需要制作一批奖状。假设现在共有超过 50 名员工获奖,如何使用「邮件合并」功能,快速地批量生成所有奖状呢?可以看到,和前面邮件的案例很像,每一张奖状中,在变化的动态内容有:公司分区、员工姓名、工号、所获荣誉这四个变量。

奖状示意图

一、准备固定模板和动态内容

正如我们前面提到的,要让「邮件合并」功能发挥作用,少不了两样基础材料:固定模板、动态内容。为了方便读者一起动手实践,大家可以下载回来后跟着文章一起动手试试。

二、开始邮件合并

准备好了基础素材后,就可以打开 Word 模板文档,进入「邮件」选项卡,开始操作了。

第一步就是「开始邮件合并」,可以看到这里提供了信函、电子邮件、信封、标签、目录五种选项。这五个东西有什么不同呢?从核心区别上来说,目录和前四个不同。我们知道,每一条动态生成的内容,其实就对应着 Excel 表格中的一行。

  • 信息、电子邮件、信封、标签这四个类型:每生成完一行 Excel 中的动态内容,会自动插入一个下一页的分节符,使页面从新的一页开始。
  • 目录类型:每生成一行 Excel 中的动态内容,不会插入分节符,会接下去继续生成下一行的动态内容。
邮件合并提供的五种不同类型

显然,邀请函、询证函等需要一份占据一页纸的,不能选择目录。而像准考证、工牌、工资条等,占不满一页纸,打印出来以后可以从一页纸上裁剪出多份的,为了节省纸张可以选择目录。除了这个核心区别以外,信封、标签提供了额外的快捷功能选项,这里就不展开讲细节了。

以生成奖状为例,因为一个奖状占满了一页纸,所以这里选哪个类型,倒也无所谓,就以信函为例继续往下好了。

三、选择收件人:导入动态内容

接下来就是将 Excel 表格中的原始数据,与这个 Word 固定模板相关联。在 Word 中的按钮名称是「选择收件人」,但其实你把它理解成「导入动态内容」,反而更好理解。选择「使用现有列表」后,在文件夹中找到第一步中的 Excel 动态内容模板,将其中的数据与 Word 固定模板相关联。

导入动态内容的 Excel

四、插入合并域:指定固定模板中显示动态内容的地方

当把动态内容的 Excel 导入后,「插入合并域」这个按钮就亮起可以操作了。很容易理解,这里可以插入的合并域,实际上就对应着 Excel 表格中的表头标题行。

插入合并域中的字段,对应了 Excel 的表头

那么,我们只要在奖状中的相应位置,把属地、员工姓名、工号、称号这四个动态内容,依次插入就可以了。注意,如果你希望这四个动态内容有不同的格式,如属地字体小,员工姓名字体大且加粗,你可以直接选中这些合并域,然后像调整正常文本一样,调整它们的格式。最终批量生成的文档,也会按你设置的格式一样。

插入四个动态内容

五、完成并合并

完成前面几步后,最后只需要点击「完成并合并 → 编辑单个文档」,Word 便会按照你定义好的模板,生成一个新的 Word 文件。在新的 Word 文件中,一共有 59 页,每一页对应着一张奖状。

至此,你应该已经对「邮件合并」这个功能有了大概的认识,接下来我们就说说几个进阶用法。

进阶:插入图片

使用「邮件合并」生成完了奖状之后,大多数类似的场景,相信你都可以举一返三了。不过,在生成准考证、工牌的时候,往往上面会印上头像和照片,但在前面的例子里,插入的合并域只能是 Excel 中的文本字段。有没有办法,能让图片也成为一种动态内容插入呢?

当然是可以的,这就需要结合 Word 中的域。你可能发现了,在提供的 Excel 模板中,有一列「头像」中,填充了每个文件的存放地址。你可以在这里下载这些头像到你的电脑后,按照实际文件地址,修改 Excel 表格中的路径。

点此下载示例头像.zip

Excel 中存放的头像文件路径

要想让图片也动态地插入进去,就需要借助 Word 中的域。我在《Word 页码使用指南 | 实用技巧》一文中其实已经介绍过这个概念,域就是 Word 中的变量。无论是页码,还是前面提到的合并域,在 Word 中都是一个变量。那么图片也是一样的,它的变量就是不同的文件地址。

因此,在菜单中选择「插入 → 域」,找到「IncludePicture」,这个域可以按文件地址来显示图片。不过,如果你直接插入,会显示「错误!未指定文件名」。这很正常,毕竟这个域需要指定文件路径,而此时我们都还没有填写。

插入域中选择 IncludePicture

你可以试着在 Word 文档中按下 Alt-F9(在 macOS 中则是 Fn-⌥Option-F9),这时会让域显示它们的「真身」。这时,在 {INCLUDEPICTURE * MERGEFORMAT} 插入「头像」。这样子,随着邮件合并读取 Excel 中的每一行内容,头像也会动态地指向不同的路径地址。

接下来,只需要「完成并合并」。不过,记得合并类型要选择「目录」,毕竟,一页可以容得下多个工牌,如果选择「目录」以外的其它选项,就会如前文中所介绍的,一个工牌会占据一页纸。

然而,当你完成合并后,发现新得到的文档还是有一些问题。头像要不还是显示「错误!未指定文件名」,要不生成的头像都是一模一样的。一般这种时候,只需要全选整个文档,按 F9 刷新,就可以得到正常的头像了。不过,在 macOS 版本的 Word 当中,可能是由于沙盒机制或别的原因,一旦你使用 F9 刷新,Word 会弹出对话框,要求你对每一张图片进行授权。

Word 针对每一张图片都会弹出授权提示

图片多的话,这样操作显示不现实。因此,如果你使用 macOS 版本的 Word 遇到这个问题,最好的解决办法是前往「偏好设置 - 文件位置」当中,设置「图像」类似所在的文件夹位置,就可以一劳永逸地解决这个问题。再次回到文档编辑中,全选按下 F9,Word 就会直接更新所有的头像了。

设置图像文件夹的授权

进阶:制作标签

还有许多时候,我们希望借助「邮件合并」功能帮助我们批量在一页纸上生成标签,例如产品标签、物件标签等等。举个例子,现在要给员工每个人的储物柜贴上标签纸,标识每个柜子的所属人和部门,就可以用「邮件合并」。

批量生成储物柜的标签贴

顾名思义,需要是要批量生成标签,在「邮件合并」中的类型就应该选择「标签」。Word 会弹出一个「标签选项」,里面已经内置了大量的不同尺寸的标签供我们挑选。根据这些尺寸,Word 其实是会帮我们快速地生成对应尺寸的表格。不过,如果你希望自定义标签的尺寸,自然也可以。只需要选择「新建标签」,这里面的选项看似复杂,但其实修改时,上面的示意图也会随着变动。只要结合上面的示意图变化,不难发现其实上边距和侧边距决定了纸张四周留白,纵向跨度和横向跨度决定了标签之间的留白。一般来说跨度需要比标签高度/宽度稍大出一点点,才方便后续的裁剪

Word 中选择标签尺寸和新建尺寸

在制作标签时,先从第一个格子开始,插入你想动态显示的内容,并设置好相应的格式。例如,我们希望贴纸上注明每个柜子所属的员工姓名、部门和编号,并且为了美观,字体加粗,且居中显示。

制作好第一个标签的内容和格式

接下来,就是「标签」类型特有的一个功能。注意到此时选项卡上的「更新标签」按钮可以点击了。当你点击后,第一个标签中的内容和样式,会被复制到其它格子当中。注意,制作标签时一定要点击「更新标签」,不然直接生成合并文档的话,每一页只有第一个格子中会显示标签。当更新以后,整个模板就会自动刷新成这样子了。之后,如果你还希望调整标签的内容或者样式,都在第一个标签上调整,任何改动要同步到所有标签上,都需要点击「更新标签」。

更新标签后,每个格子中都会自动生成标签

这时,再去点击完成并合并,就能得到所有的标签了。

进阶:使用「规则」

细心的你可能发现了,在上一节的标签当中,当点击「更新标签」时,除了第一个小格子之外,之后的每一个标签,都多出了「下一记录」的显示。其实不难理解,这个指令告诉 Word,上一行的动态内容已经显示完了,看到这个标记后,接下来的内容,请从 Excel 动态内容中的下一行开始读取。

这个「下一记录」就是一个「规则」,从本质上来说,它也是一种「域」,你可以从选项卡中看到,「邮件合并」功能提供了 9 种所谓的规则

邮件合并提供的 9 种规则

刚好,有 Power+ 的读者在 Slack 中提问:如何使用邮件合并功能,实现如图所示的效果?通过与其进一步沟通,发现其重点是希望实现其绘制的两层嵌套。

Power+ 读者提问

看到这个提问,我也的确想到以前看到过的一个使用场景。有一家公司需要将大量的英文内容翻译成中文,招聘了数十人的翻译团队,并且将英文原版内容拆分到 Excel 表格中,如 A 列是一级标题,B 列是二级标题,C 列是需要翻译的小节内容。然后再将这些内容分给不同的翻译员,最终翻译完成后,再重新汇总成文。那么这个最终汇总成文的过程,基本上就是这位读者想要实现的。虽然我不知道那家翻译公司是否使用了「邮件合并」功能,来将 Excel 中的拆分内容,重新组合成文本,但经过一翻探索,这个需求是可以用「规则」实现的。

为了便于示例,在演示文档的 Sheet 2 中,模拟了一份类似于提问读者的数据,我们来看看怎么还原为 Word 中的样子。

演示文件中的 Sheet 2

我们先来分析一下基本的思路:

  1. 优先显示一级「类别」列;
  2. 当「类别」没有发生变化时,显示二级的「明细」;
  3. 当「类别」与上一行不同时,生成新的「类别」;

翻译成 Word 中的规则,则需要写成:

{ SET C1 { MERGEFIELD 类别 } }
{ IF { C1 } <> { C2 } "{ MERGEFIELD 类别 }
{ MERGEFIELD 明细 }" "{ MERGEFIELD 明细 }"} { SET C2 { MERGEFIELD 类别 } }

这里有三点需要注意的:其一,这里的 {} 其实是 Word 中的域,你不能直接复制粘贴到 Word 中,必须使用 Ctrl-F9(在 macOS 中则是 Fn-⌘Command-F9)插入一对大括号,然而在其中输入域的名字才行;其二,{ MERGEFIELD 变量名称 } 是在显示域代码时,展示的「合并域」的域代码,这个变量名称就是插入的合并域名称;其三,因为固定模板还要考虑到格式的问题,因此在写这段逻辑时,格式(特别是换行)也需要考虑在内,因此显得更加乱了

为了便于理解,我们暂时忽略格式(换行)的问题,以最清晰的逻辑展示形式,这段规则应该是这样的:

{ SET C1 { MERGEFIELD 类别 } }
{ IF { C1 } <> { C2 } "{ MERGEFIELD 类别 }{ MERGEFIELD 明细 }" "{ MERGEFIELD 明细 }"}
{ SET C2 { MERGEFIELD 类别 } }

可以看到,实际上就是三句话,两个规则:

  1. 「设置书签」,对应 { SET 变量名 值}:这里的「书签」实际上就是我们理解的变量。前面的思路分析已经提到了,我们需要判断上下行之间的「类别」有没有发生变化,那么就需要两个值来做比较,C1 书签记录的是本行「类别」的值,C2 书签记录的是上一行「类别」的值。
  2. 「如果…那么…否则…」,对应{ IF 判断条件 结果为真的值 结果为假的值 }。也就是说,根据 C1 与 C2 是否相等,当「类别」没有变动时,即 C1<>C2 为假,我们只需要显示「明细」。如果「类别」发生了变动,即 C1<>C2 为真,那么则显示新的「类别」,同时换行,显示该行的「明细」。

通过这样的方式,就实现了该读者想要的两层循环。不过,如果按这样的方式生成合并文档,会发现漏掉了第一个类别,即缺少了一个 A。这是怎么回事呢?

缺少了第一个 A

倒回去分析一下,不难发现问题出现在第一次判定 { C1 } <> { C2 } 这个条件时。由于在第一次执行到这里时,还没有生成变量 C2。而根据结果中缺失了第一个 A,可知判断条件走向了「结果为假的值」,也就是此时 Word 认为 C1 = C2。经过我的试验,我发现 Word 在执行这些规则时,可能有一个潜在的逻辑:由于首次判定时,还没有生成 C2,那么为了使 C2 有值不报错,会优先执行第三句 { SET C2 { MERGEFIELD 类别 } },即这时 C2 也被赋值成了 A。

知道了这个问题,要修正一下就非常容易了。只需要针对第一条记录做一些特别处理,加入以下一行语句,使得在第一行时,强制显示一下第一行的类别。若不是第一行,则什么都不显示。其中,{ MERGESEQ } 表示的是第几条记录。

{ IF { MERGESEQ } = 1 "{ MERGEFIELD 类别 }" "" }

这样,我们只需要在邮件合并中,使用「规则」和「域」,编写如下域代码,一共四行:

{ IF { MERGESEQ } = 1 "{ MERGEFIELD 类别 }" "" }
{ SET C1 { MERGEFIELD 类别 } }
{ IF { C1 } <> { C2 } "{ MERGEFIELD 类别 }{ MERGEFIELD 明细 }" "{ MERGEFIELD 明细 }"}
{ SET C2 { MERGEFIELD 类别 } }

如果进一步考虑合并文档的格式和换行问题,最终你需要在 Word 中编辑域代码如下(注意换行的位置):

{ IF { MERGESEQ } = 1 "{ MERGEFIELD 类别 }" "" }{ SET C1 { MERGEFIELD 类别 } }
{ IF { C1 } <> { C2 } "{ MERGEFIELD 类别 }
{ MERGEFIELD 明细 }" "{ MERGEFIELD 明细 }"}{ SET C2 { MERGEFIELD 类别 } }

同时,为了在最终生成的合并文件样式上区分「类别」和「明细」,直接编辑其使用不同的样式。

设置不同的样式

这样,最终合并得到的文档,就能顺利达成该提问读者希望的样子。

最终达成如提问读者希望的效果

以上,就是关于 Word 中「邮件合并」相关的知识和技巧,大家如果还有更多的问题,欢迎在评论中交流探讨。


103

您好,为了保护少数派用户创造的内容、维护良好的社区氛围,我们将从 2019 年 6 月 10 日起实行新的《少数派评论规范》,具体内容您可以通过相关页面了解,感谢您对少数派的理解与支持。(๑•ᴗ•๑)

精选评论 (4)

我的评论

目录

邮件合并是什么?

第一次使用邮件合并:批量生成奖状

一、准备固定模板和动态内容

二、开始邮件合并

三、选择收件人:导入动态内容

四、插入合并域:指定固定模板中显示动态内容的地方

五、完成并合并

进阶:插入图片

进阶:制作标签

进阶:使用「规则」